package apis

import (
	"gitee.com/sansaniot/ssiot-core/httpmvc/api"
	"gitee.com/sansaniot/ssiot-core/logger"
	"gitee.com/sansaniot/ssiot-core/msg/sms"
	"gitee.com/sansaniot/ssiot-core/msg/sms/sdk/ali"
	"gitee.com/sansaniot/ssiot-core/serrors"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"

	"ssnotify/common/utils"
	"ssnotify/internal/notify/models"
	"ssnotify/internal/notify/models/command"
	"ssnotify/internal/notify/models/query"
	"ssnotify/internal/notify/service"
)

type NotifyTemplate struct {
	api.Api
}

func (e NotifyTemplate) FindNotifyTemplate(c *gin.Context) {
	// 请求参数
	req := query.NotifyTemplateGetReq{}
	// 模型
	m := models.NotifyTemplate{}
	// 上下文
	err := e.MakeContext(c).Bind(&req).MakeModel(&m.Model).Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 阿里短信模板列表
	if req.AliTemplate {
		list := make([]ali.Template, 0)
		if err := sms.GetTemplateList(&list); err != nil {
			logger.Error(err)
			e.Fail(0, err.Error())
			return
		}
		// 屏蔽几个系统模板
		for i := len(list) - 1; i >= 0; i-- {
			if list[i].TemplateCode != nil && utils.StrIn(*(list[i].TemplateCode), []string{"SMS_276030562", "SMS_276200321", "SMS_259675687", "SMS_248360015", "SMS_230270576", "SMS_277410854", "SMS_277180853", "SMS_277550574", "SMS_272640537"}) {
				list = append(list[:i], list[i+1:]...)
			}
		}
		e.Data(list)
		return
	}
	req.LoadUser(c)
	// 执行
	var result interface{}
	if err, result = m.FindNotifyTemplateList(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(result)
}

func (e NotifyTemplate) AddNotifyTemplate(c *gin.Context) {
	// 请求参数
	req := command.NotifyTemplateAddReq{}
	// 业务service
	s := &service.NotifyTemplate{}
	// 模型
	notifyTemplate := &models.NotifyTemplate{}
	// 上下文
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeModel(&notifyTemplate.Model).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// service注入实体
	s.SetNotifyTemplateModel(notifyTemplate)
	// 用户信息
	req.LoadUser(c)
	// 执行
	var result interface{}
	if result, err = s.AddNotifyTemplate(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Data(result)
}

func (e NotifyTemplate) EditNotifyTemplate(c *gin.Context) {
	// 请求参数
	req := command.NotifyTemplateModReq{}
	// 业务service
	s := &service.NotifyTemplate{}
	// 模型
	notifyTemplate := &models.NotifyTemplate{}
	// 上下文
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeModel(&notifyTemplate.Model).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// service注入实体
	s.SetNotifyTemplateModel(notifyTemplate)
	// 用户信息
	req.LoadUser(c)
	// 执行
	if err = s.EditNotifyTemplate(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(nil)
}

func (e NotifyTemplate) DeleteNotifyTemplate(c *gin.Context) {
	// 请求参数
	req := command.NotifyTemplateDelReq{}
	// 业务service
	s := &service.NotifyTemplate{}
	// 模型
	notifyTemplate := &models.NotifyTemplate{}
	// 上下文
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeModel(&notifyTemplate.Model).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 用户信息
	req.LoadUser(c)
	// service注入实体
	s.SetNotifyTemplateModel(notifyTemplate)
	// 执行
	if err = s.DeleteNotifyTemplate(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(nil)
}
